// #include <iostream>
// #include <string>
//
// using namespace std;
//
// //const 成员函数
// //注意写法 const写在函数后面
// //在常成员函数不能修改数据成员 只读函数
// //常成员函数和普通函数形成重载
//
// class MM
// {
// public:
//     void print() const
//     {
//         //错误代码
//         //name = "bcd";
//         cout << "常成员函数" << endl;
//     }
//
//     void print()
//     {
//         cout << "abc" << endl;
//     }
// protected:
//     string name={"abc"};
//     int num = 0;
// };
//
// //常数据成员
// //初始化参数列表  只限构造函数有 类型(参数1,参数2):成员1（参数1),成员2（参数2），....{}
// class Girl
// {
// public:
//     // Girl(string name,int num)
//     // {
//     //     m_name = name;
//     //     m_num  = num;
//     // }
//     Girl(string name,int num):m_name(name),m_num(num)
//     {
//         cout << "初始化参数列表" << endl;
//     }
//     Girl():m_name("默认"){}
//
//
//     void print()
//     {
//         cout << m_name << m_num << endl;
//     }
// protected:
//     string m_name;
//     int m_num;
// };
//
// class Boy
// {
// public:
//     Boy(string name,int age,int num ):m_name(name),m_age(age),num(num)
//     {
//         //其他数据无所谓 你愿意用初始化列表就用，不用卸载里面也可以
//     }
//     void print()
//     {
//         // num = 1000;
//         //常数据成员不能被修改
//         cout << num << endl;
//     }
// protected:
//     const string m_name;
//     int m_age;
//     const int num; //当常数据成员 没有调用初始化参数列表的时候报错
// };
//
//
// int main()
// {
//
//     MM* p = new MM();
//     //普通成员调用普通函数
//     p->print();
//
//     //常对象
//     const MM num;
//     //常对象只能拿调用常成员函数
//     num.print();
//
//     Girl object;
//     object.print();
//
//     Girl* po = new Girl("xiaowang",12);
//     po->print();
//
//     Boy obkj("xiao",12,13);
//
//
//     return 0;
// }